package com.wyix.service;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * 线程安全的日志队列，基于阻塞队列实现生产者-消费者模型
 *
 * @author wangdx
 * @since 2025/8/1
 */
public class LogQueue {
    // 容量为1000的阻塞队列，防止日志过多导致内存溢出
    private static final BlockingQueue<String> queue = new ArrayBlockingQueue<>(1000);

    /**
     * 放入日志（生产者：业务线程调用）
     */
    public static void put(String log) {
        try {
            queue.put(log); // 队列满时会阻塞，避免OOM
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt(); // 恢复中断状态
            System.err.println("日志放入队列失败：" + e.getMessage());
        }
    }

    /**
     * 取出日志（消费者：日志线程调用）
     */
    public static String take() {
        try {
            return queue.take(); // 队列为空时会阻塞，等待新日志
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            System.err.println("日志取出队列失败：" + e.getMessage());
            return null;
        }
    }
}